назад

Алгоритмы компрессии цифрового видео

Эта статья не претендует на то, чтобы дать полный обзор самых последних решений, применяемых в современных компрессорах. Многие из этих решений производители компрессоров предпочитают хранить как коммерческую тайну. Эта статья скорее о том, в каком направлении и как далеко продвинулись современные компрессоры по сравнению со старыми добрыми MPEG-1 и MPEG-2.

Как бы ни ругали компенсацию движения, она по-прежнему остается лучшим способом устранения временной избыточности видеопоследовательности. Все разработчики компрессоров видео делятся на три категории. Первая категория: любит компенсацию движения и использует ее. Вторая категория, самая большая, не любит компенсацию движения и все равно использует ее. Третья категория, самая маленькая, пытается изобрести альтернативу компенсации движения .

Видеокомпрессор

Рассмотрим, из каких частей состоит типичный видеокомпрессор, в котором используется оценка и компенсация движения.

Человеческий глаз по-разному воспринимает яркостную и цветовую информацию и по-разному относится к искажениям на разных пространственных частотах. Поэтому крайне желательно отделить цветовую информацию от яркостной и разбить изображение на частотные полосы.

Для отделения цветовой информации каждый кадр исходной видеопоследовательности переводится из цветокомпонентного представления изображения RGB в цветоразностное представление YUV.

После этого видеопоследовательность попадает на блок фильтров предварительной обработки изображения. Здесь происходит незначительное изменение изображения для улучшения компрессии видеопотока. Отсеиваются шумы, устраняется джиттер, сглаживаются некоторые детали изображения и т.д.

Человеческий глаз имеет намного больше рецепторов, чувствительных к изменению яркости изображения, чем рецепторов, чувствительных к изменению цвета, поэтому в каждом кадре проводится цветовое прореживание, то есть цветовая информация представляется более грубо, чем яркостная.

Все кадры в сжатом виде делятся на две большие группы: ключевые кадры и неключевые. Ключевой кадр, в отличие от неключевого, восстанавливается из сжатого вида с применением информации только о нем самом, о других кадрах никакой информации не понадобится. Часто бывают случаи, когда необходимо иметь ключевыми все кадры видеопоследовательности. В MPEG-1, например, ключевым кадром является каждый 15-й кадр. Если необходимо сделать кадр ключевым, то он сразу подается на преобразователь из пространственного представления сигнала в частотно-пространственное. Если же кадр необходимо сделать неключевым, то он предсказывается по соседним кадрам оценкой и компенсацией движения, а на преобразователь подается только ошибка предсказания.

В MPEG имеются однонаправленный и двунаправленный способы предсказания. Однонаправленное ведется по одному из предыдущих кадров, а двунаправленное - по одному из предыдущих и одному из последующих кадров. Кадр предсказывается по соседним кадрам в том виде, в котором они появятся на декодере, то есть с частичной потерей качества. На вход преобразователя подаются отсчеты исходного сигнала, на выходе получаются коэффициенты разложения исходного сигнала по базису, состоящему из специальных локализованных по частоте и в пространстве функций. Подвергнутая преобразованию видеопоследовательность поступает на квантователь, затем на структурный и арифметический кодеры.

rgb2yuv - преобразователь из цветокомпонентного представления изображения RGB в цветоразностное представление YUV;

PP (Preprocessor) - блок фильтров предварительной обработки изображения;

CD (Color Decimator) - блок цветового прореживания;

MEMC (Motion Estimation and Motion Compensation) - блок оценки и компенсации движения;

T (Transformer) - преобразователь из пространственного представления сигнала в частотно-пространственное;

Q (Quantizer) - квантователь;

Q-1 (ВЕРСТАЛЬЩИКУ: "-1" - это степень) (Dequantizer) - деквантователь;

T-1 (ВЕРСТАЛЬЩИКУ: "-1" - это степень) (Reconstructor) - преобразователь из частотно-пространственного представления сигнала в пространственное;

Buffer - буфер хранения нескольких последних кадров;

SC (Structure Coder) - структурный кодер;

AC (Arithmetic Coder) - арифметический кодер.

Предварительная обработка видеопоследовательности.

На этом этапе изображение очищается от мелкого мусора, который может значительно снизить степень компрессии в целом. Каждый кадр очищается от высокочастотных шумов, устраняются нежелательные быстрые хаотичные движения камеры – так называемый джиттер.

Другой полезный ход, выполняемый на стадии предварительной обработки изображения – это так называемая гамма-коррекция. Дело в том, что наш глаз реагирует на изменение яркости нелинейно. Поэтому для того чтобы изменение яркости на единицу воспринималось глазом одинаково, независимо от того, какая яркость меняется, проводят масштабирование яркостей пикселов с использованием степенной функции.

Преобразователи из пространственного представления сигнала в частотно-пространственное и наоборот

В компрессорах MPEG-1 и MPEG-2 использовалось блочное дискретное косинусное преобразование (ДКП). Однако компрессоры, использующие ДКП, страдают массой "пороков". Один из таких недостатков - появление на изображении артефактов правильной формы (кубики). Другой порок - плохая масштабируемость сжатого сигнала по разрешению. При уменьшении разрешения изображения в два раза по горизонтали и в два раза по вертикали можно выкинуть всего 15 коэффициентов из 64, то есть уменьшить объем представления всего на 23%. Кроме того, MPEG-1 и MPEG-2 при высоких степенях компрессии смазывают грани, отправляют в мир иной мелкие детали картинок, подставляют ауры и шероховатости вблизи границ объектов изображения.

Современные компрессоры используют дискретное вейвлет-преобразование, смысл которого довольно прост.

Для одномерного сигнала один уровень разложения выглядит следующим образом.

Исходный сигнал, другими словами, последовательность дискретных значений, разлагается по двум группам функций. Функции хорошо локализованы в пространстве и по частоте, центрированы. Функции такие, что последовательность коэффициентов является уменьшенной копией исходного сигнала

Это свойство позволяет применить аналогичное разложение для и получить следующий уровень вейвлет-разложения.

Для двумерного сигнала, такого как изображение, вейвлет-преобразование на каждом уровне разложения применяется дважды: сначала по строкам, затем по столбцам.

На рисунке заметно, что низкочастотная полоса 0 представляет собой уменьшенную и огрубленную копию исходного изображения, а восемь высокочастотных полос - это детали, которых нет в огрубленной копии.

Вывод: вейвлет-разложение не приводит к появлению артефактов правильной формы и хорошо масштабируется по разрешению: для того чтобы уменьшить разрешение уже сжатого изображения в два раза по горизонтали и в два раза по вертикали, можно выкинуть три коэффициента из четырех, то есть уменьшить объем представления в четыре раза.

В то же время вейвлет-разложение не избавилось от смазывания граней, от утраты мелких деталей, появления "незваной" ауры и шероховатостей вблизи границ объектов изображения.

Оценка и компенсация движения

Пожалуй, самым ресурсоемким этапом компрессии видео является оценка движения, основная задача которой - поиск вектора смещения заданного участка изображения относительно такого же участка на предыдущем кадре.

Наиболее популярным среди наших дедов способом поиска вектора движения был полный перебор всех векторов из заданной области (обычно [-64..+63, -64..+63]) на наилучшее соответствие и логарифмический поиск. Но полный перебор с вычислением меры соответствия для каждого возможного вектора занимает очень много времени, а логарифмический поиск очень часто ошибается и дает "плохое" решение, несмотря на то, что существует "хорошее".

Наши отцы уже применяли метод корреляции фаз. Перейдя в область Фурье с использованием быстрого преобразования, они быстро и точно находили вектор смещения одной области относительно другой. Но точность достигалась только при малых смещениях больших областей, для изображений с быстрыми движениями в кадре метод был просто неприменим.

Когда вейвлет-преобразование заменило блочное ДКП, родилась идея применять каскадный поиск вектора движения. Сначала ищется вектор движения для уменьшенной копии исходного сигнала на высоком уровне декомпозиции. Это сильно сокращает область поиска, поскольку изображение оказывается уменьшенным в несколько раз, а следовательно, и возможные смещения тоже становятся в несколько раз меньше.

На следующем шаге поиск смещения проводится на следующем, более низком уровне декомпозиции. Искомая область разбивается на четыре части, и проверяется, насколько им подходит найденный на предыдущем шаге вектор смещения. Если вектор смещения вполне подходящий, то он оставляется таким как есть. Если хотя бы для одной из четырех частей он не подходит, то для каждой части ищут уточнения вектора смещения, найденного на предыдущем шаге.

Таким образом получаем сразу двух убитых зайцев: снижается время поиска вектора смещения и осуществляется более мелкое разбиение кадра на области в местах со сложным движением.

Продолжением каскадного поиска является многомасштабная компенсация движения.

Квантователь

Задача процесса квантования сигнала очень проста: каждому отсчету или группе отсчетов исходного сигнала нужно поставить в соответствие число, по которому позже при деквантовании можно будет восстановить отсчет или группу отсчетов исходного сигнала соответственно. Если в операции получения такого числа участвует один отсчет, то квантование называется скалярным, если группа отчетов - векторным. Восстановление при деквантовании, как правило, получается неточным, но попытки обеспечить максимальное сходство между исходным и восстановленным сигналом все-таки были.

На сегодняшний день самыми популярными являются три вида квантователей:

1. однородный скалярный квантователь с мертвой зоной;

2. векторный квантователь со словарем;

3. сеточный квантователь.

В области значений отсчетов сигнала выбирается отрезок с границами, симметрично расположенными вокруг нуля. Все значения отсчетов сигнала, попадающие в этот отрезок, будут квантоваться в ноль. Именно поэтому этот отрезок носит гордое имя "мертвая зона", а его длина - "размер мертвой зоны". Вся оставшаяся область значений отсчетов сигнала разбивается на отрезки одинаковой длины. Длина этих отрезков называется шагом квантования.

Каждому отрезку области значений отсчетов сигнала присваивается индекс в порядке возрастания попадающих в него значений. Индексы начинаются с отрицательных, заканчиваются положительными, при этом индекс мертвой зоны должен быть нулевым. Для каждого отрезка ищут центроид – среднее значение отчетов сигнала, попадающих в этот отрезок.

При квантовании сигнала значение каждого его отсчета заменяется на индекс интервала, в которое оно попадает. При деквантовании каждый индекс отрезка заменяется на его центроид.

Смысл векторного квантования со словарем состоит в том, чтобы разбить исходный сигнал на участки одинакового размера (на прямоугольные области). Затем эти участки собираются в группы по сходству в плане какой-либо меры. Для каждой группы участков вычисляется средневзвешенный участок, он заносится в таблицу словаря, которая будет передаваться на декодер, а участки по всему сигналу заменяются на индексы участков в словарной таблице, на которые они похожи.

Еще Шенон доказал, что векторный квантователь при одинаковом искажении сигнала снижает его энтропию сильнее, чем скалярный квантователь. Тем не менее векторный квантователь применяется далеко не всегда. Одним из самых больших недостатков векторного квантователя со словарем является высокая вычислительная сложность построения словаря. Процесс построения словаря итерационный и требует большого количества итераций. К счастью для всего человечества, при компрессии видео в качестве отправной точки для построения словаря можно использовать полученный для предыдущего кадра словарь, что сильно ускоряет процесс.

Сеточный квантователь – особый вид векторного квантователя, очень похожий на скалярный квантователь с мертвой зоной, но индексы интервалов квантования от отсчета к отсчету меняются по определенному правилу. Получается так, что индекс значения отсчета зависит не только от самого значения, но и от значений соседних отсчетов.

Несмотря на то, что PSNR (Peak Signal Noise Ratio) сейчас чаще других параметров применяется для оценки сходства между исходным и восстановленным изображениями, эта функция не отражает степень визуального сходства между исходным изображением и восстановленным. Физиология зрения и психология восприятия изображения человека настолько сложны, что до сих пор не существует способа математического расчета степени визуальной схожести двух изображений. Тем не менее работа над этой проблемой кипит, и часть наработок уже широко используется в компрессорах изображения и видео.

Глаз человека по-разному воспринимает одинаковые искажения разных пространственных частот изображения и "усваивает" лишь угловые размеры объектов, на которые смотрит, поэтому пространственные частоты измеряются либо в числе периодов на градус (cpd – cycles per degree), либо в числе периодов на пиксел изображения, но тогда указывается, с какого расстояния, измеренного в размерах пиксела, обозревается изображение.

Этот рисунок демонстрирует тот факт, что наш глаз менее чувствителен к искажениям более высоких частот, поэтому перед квантованием коэффициенты вейвлет-разложения домножают на специальный весовой коэффициент, который увеличивается по мере повышения чувствительности человеческого глаза к искажениям на данной частоте.

Процедура расчета весовых коэффициентов сильно усложняется, когда изображение должно рассматриваться с разных дистанций. Кроме того, для слишком больших искажений функция чувствительности меняет свой вид. И наконец, самый тяжелый случай. Когда сжатое изображение предполагает масштабирование по отношению сигнал/шум, в расчете весовых коэффициентов приходится участвовать сразу нескольким функциям чувствительности.

Другая особенность человеческого зрения - так называемый эффект маскирования. Наш глаз содержит огромное количество рецепторов и способен видеть картинку с очень большим разрешением. Однако число нейронов, идущих от глаза к мозгу, не настолько велико, чтобы передать воспринятую картинку в полном объеме. В результате получается так, что если мы видим множество мелких объектов на ограниченной площади, то эти объекты сливаются. А на чистой поверхности один точно такой же объект был бы виден отчетливо.

Изложенные мной идеи применяются для компрессии и видео-, и статичного изображения. Видеоизображение "течет и изменяется", по-особому воспринимается человеческим глазом, поэтому его компрессия сложнее компрессии "неподвижной" картинки.

В MPEG-1 ключевой кадр - каждый 15-й.

Перед компрессией видеоматериал очищается от мелкого мусора: от высокочастотных шумов и нежелательных быстрых хаотичных движений камеры.

Если использовать блочное дискретное косинусное преобразование, при уменьшении разрешения изображения в два раза по горизонтали и в два раза по вертикали можно уменьшить объем представления всего на 23%.

При высоких степенях компрессии MPEG-1 и MPEG-2 страдают смазыванием граней, исчезновением мелких деталей и появлением ауры и шероховатостей вблизи границ объектов изображения.

Самым ресурсоемким этапом компрессии видео является оценка движения - поиск вектора смещения.

Квантование сигнала: каждому отсчету или группе отсчетов исходного сигнала ставится в соответствие число.

Деквантование - восстановление отсчета или группы отсчетов исходного сигнала.

Человеческий глаз воспринимает лишь угловые размеры объектов, на которые смотрит.

Наш глаз мало чувствителен к искажениям высоких частот.

назад
macolor site
Сайт управляется системой uCoz